package com.voiceblog.action;

import com.opensymphony.xwork2.ActionSupport;
import com.voiceblog.model.AlbumDAO;
import com.voiceblog.model.Photo;
import com.voiceblog.model.PhotoDAO;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.List;

import org.apache.struts2.ServletActionContext;


public class FileUploadAction extends ActionSupport {
	
	    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

		private static final int BUFFER_SIZE = 16 * 1024 ;
	   
	    private File myFile;
	    private String contentType;
	    private String fileName;
	    private String imageFileName;
	    private String caption;
	   
	    private Integer albumId;
	    private PhotoDAO photoDAO;
	    private AlbumDAO albumDAO;
	    
	    private List potolist;
	    
	    public List getPotolist() {
			return potolist;
		}

		public void setPotolist(List potolist) {
			this.potolist = potolist;
		}

		public Integer getAlbumId() {
			return albumId;
		}

		public void setAlbumId(Integer albumId) {
			this.albumId = albumId;
		}

		public PhotoDAO getPhotoDAO() {
			return photoDAO;
		}

		public void setPhotoDAO(PhotoDAO photoDAO) {
			this.photoDAO = photoDAO;
		}

		public AlbumDAO getAlbumDAO() {
			return albumDAO;
		}

		public void setAlbumDAO(AlbumDAO albumDAO) {
			this.albumDAO = albumDAO;
		}

		public void setMyFileContentType(String contentType) {
	        this .contentType = contentType;
	   }
	   
	    public void setMyFileFileName(String fileName) {
	        this .fileName = fileName;
	   }
	       
	    public void setMyFile(File myFile) {
	        this .myFile = myFile;
	   }
	   
	    public String getImageFileName() {
	        return imageFileName;
	   }
	   
	    public String getCaption() {
	        return caption;
	   }

	    public void setCaption(String caption) {
	        this .caption = caption;
	   }
	   
	    private static void copy(File src, File dst) {
	        try {
	           InputStream in = null ;
	           OutputStream out = null ;
	            try {                
	               in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
	               out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
	                byte [] buffer = new byte [BUFFER_SIZE];
	                while (in.read(buffer) > 0 ) {
	                   out.write(buffer);
	               }
	           } finally {
	                if ( null != in) {
	                   in.close();
	               }
	                if ( null != out) {
	                   out.close();
	               }
	           }
	       } catch (Exception e) {
	           e.printStackTrace();
	       }
	   }
	   
	    private static String getExtention(String fileName) {
	    	System.out.println(fileName);
	        int pos = fileName.lastIndexOf(".");
	        return fileName.substring(pos);
	   }

	   @Override
	    public String execute()     {        
	       imageFileName = new Date().getTime() + getExtention(fileName);
	       File imageFile = new File(ServletActionContext.getServletContext().getRealPath( "/UploadImages" ) + "/" + imageFileName);
	       copy(myFile, imageFile);
	        return SUCCESS;
	   } 
	   public String addPhoto(){
		   imageFileName = new Date().getTime() + getExtention(fileName);
	       File imageFile = new File(ServletActionContext.getServletContext().getRealPath( "/UploadImages" ) + "/" + imageFileName);
	       copy(myFile, imageFile);
	       Photo photo=new Photo();
	       photo.setAlbum(albumDAO.findById(albumId));
	       photo.setPhoto(imageFileName);
	       photo.setPhotoDescription(caption);
	       photoDAO.save(photo);
	       potolist=photoDAO.findByAlbum(albumId);
		   return SUCCESS;
	   }
}
